-- redis实现分布式锁的加锁操作

-- 变量声明部分 -------

local lockKey = KEYS[1]
local stateKey = KEYS[2]
local tryToken = ARGV[1]
local expireSeconds = ARGV[2]

-- 逻辑部分 ---------

if redis.call("set", lockKey, tryToken, "EX", expireSeconds, 'NX') then
    -- 初次获取锁成功
    redis.call("setex", stateKey, expireSeconds, 1)
    return true
end
-- 判断是否可重入
if redis.call("get", lockKey) == tryToken then
    -- 重入锁成功
    redis.call("incr", stateKey)
    return true
end
-- 锁不是自己的，重入失败
return false



